#!/usr/bin/env python3
# Created by han on 2016/6/17
import os,sys,re
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from module import compute,find,log


def frist(arg):
    """
    首先处理括号的函数
    :param arg: 用户输入的字符串
    :return:返回去完括号的字符串
    """
    old = arg
    while True:
        print("计算",old)  #3*5+(2*-2.0)
        log.logger.info(old)
        ret = re.search(r"\([^(^)]+\)", old)            #找到输入的字符串中是括号的但是括号里面没有括号的字符串
        #上面做修改了
        if not ret:                                     #如果没有则退出
            break
        print("计算括号中的表达式", ret.group())
        rets = ret.group().strip("(").strip(")")        #有则获取这个对象的元素并且将其开头结尾的（）括号去掉
        # print(rets)  #3+6*4
        if "*" in rets or "/" in rets:
            end = find.find_mul(rets)                   #如果表达式中有* 或 / 则去找出包含成或者除的表达式
            end = "(" + end + ")"
            print("计算括号中表达式的*或/后的结果", end)
        else:
            end = compute.adds(rets)
            print("计算括号中+或-后的结果",end)
        # old = re.sub(r"\([^(^)]+\)",str(end),old,1)
        old = re.sub(r"\([^(^)]+\)",str(end),old,1)
        print(old)
    return old


def last(arg):
    """
    接收没有括号的表达式做运算
    :param arg: 没有括号的表达式字符串
    :return: 返回最终计算结果
    """
    while True:
        if "*" in arg or "/" in arg:                                        #如果有 * 或 /法
                ret = re.search("-?\d*\.?\d+[*/]-?\d+\.?\d*",arg)           #找到第一个乘除法的式子
                print("找到*或/的表达式", ret.group())
                log.logger.info(ret.group())
                rets = compute.mul(ret.group())                             #将这个式子做乘除运算
                print("计算表达式后的结果",rets)
                log.logger.info(rets)
                arg = re.sub("-?\d*\.?\d+[*/]-?\d+\.?\d*",str(rets),arg, 1)     #将做完的结果替换回原来的公式里面
                print("将结果替换回原公式",arg)
                log.logger.info(arg)
                if "+" not in arg and "-" not in arg and "*" not in arg and "/" not in arg:     #再判断如果没有任何符号了则表示算完了，返回
                    return rets
                else:
                    continue                                                    #否则继续运算
        else:
            rets = compute.adds(arg)                                            #如果没有乘除了，就剩下+ - 则进行+ - 运算后返回
            log.logger.info( rets)
            return rets